package com.guomao.cloud.service.impl;

import com.guomao.cloud.domain.User;
import com.guomao.cloud.service.UserService;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * UserServiceImpl类是UserService接口的实现类，提供了用户相关的业务逻辑实现
 * 使用@Service注解标记为Spring服务层组件
 */
@Service
public class UserServiceImpl implements UserService {
    // 用户列表，用于存储用户数据
    private List<User> userList;

    /**
     * 创建用户方法
     * @param user 要创建的用户对象
     */
    @Override
    public void create(User user) {
        userList.add(user);
    }

    /**
     * 根据用户ID获取用户信息
     * @param id 用户ID
     * @return 找到的用户对象，如果未找到则返回null
     */
    @Override
    public User getUser(Long id) {
        // 使用Stream API过滤出指定ID的用户
        List<User> findUserList = userList.stream().filter(userItem -> userItem.getId().equals(id)).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(findUserList)) {
            return findUserList.get(0);
        }
        return null;
    }

    /**
     * 更新用户信息
     * @param user 包含更新后信息的用户对象
     */
    @Override
    public void update(User user) {
        // 使用Stream API找到指定ID的用户并更新其信息
        userList.stream().filter(userItem -> userItem.getId().equals(user.getId())).forEach(userItem -> {
            userItem.setUsername(user.getUsername());
            userItem.setPassword(user.getPassword());
        });
    }

    /**
     * 根据用户ID删除用户
     * @param id 要删除的用户ID
     */
    @Override
    public void delete(Long id) {
        // 先获取用户对象，如果存在则从列表中移除
        User user = getUser(id);
        if (user != null) {
            userList.remove(user);
        }
    }

    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 找到的用户对象，如果未找到则返回null
     */
    @Override
    public User getByUsername(String username) {
        // 使用Stream API过滤出指定用户名的用户
        List<User> findUserList = userList.stream().filter(userItem -> userItem.getUsername().equals(username)).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(findUserList)) {
            return findUserList.get(0);
        }
        return null;
    }

    /**
     * 根据用户ID列表批量获取用户信息
     * @param ids 用户ID列表
     * @return 包含所有匹配用户的列表
     */
    @Override
    public List<User> getUserByIds(List<Long> ids) {
        // 使用Stream API过滤出ID在指定列表中的所有用户
        return userList.stream().filter(userItem -> ids.contains(userItem.getId())).collect(Collectors.toList());
    }

    /**
     * 初始化方法，在Bean创建后执行
     * 用于初始化用户列表并添加一些测试数据
     */
    @PostConstruct
    public void initData() {
        userList = new ArrayList<>();
        // 添加三个测试用户
        userList.add(new User(1L, "admin", "123456"));
        userList.add(new User(2L, "root", "123456"));
        userList.add(new User(3L, "jack", "123456"));
    }
}
